#ifndef DELAYDEVICEPARAMSSET_H
#define DELAYDEVICEPARAMSSET_H

#include <QDialog>
#include <QMouseEvent>
#include <QPoint>
#include <QTimer>

namespace Ui {
class DelayDeviceParamsSet;
}

class DelayDevice;
class DelayDeviceParamsSet : public QDialog
{
    Q_OBJECT

public:
    /**
     * @brief 构造函数
     * @param pDelayDevice 延迟设备对象指针
     * @param parent 父窗口指针
     */
    explicit DelayDeviceParamsSet(DelayDevice* pDelayDevice, QWidget *parent = nullptr);
    
    /**
     * @brief 析构函数
     */
    ~DelayDeviceParamsSet();

protected:
    /**
     * @brief 鼠标按下事件处理
     * @param event 鼠标事件对象
     * @details 处理鼠标按下事件，判断是否开始拖拽窗口
     */
    void mousePressEvent(QMouseEvent *event) override;
    
    /**
     * @brief 鼠标移动事件处理
     * @param event 鼠标事件对象
     * @details 处理鼠标移动事件，实现窗口拖拽功能
     */
    void mouseMoveEvent(QMouseEvent *event) override;
    
    /**
     * @brief 鼠标释放事件处理
     * @param event 鼠标事件对象
     * @details 处理鼠标释放事件，结束窗口拖拽
     */
    void mouseReleaseEvent(QMouseEvent *event) override;

private slots:
    /**
     * @brief 定时器槽函数，用于更新AD值
     * @details 定时从设备获取AD值并更新到UI表格中
     */
    void onUpdateADValues();
    
    /**
     * @brief 初始化设置按钮点击事件槽函数
     * @details 收集UI中的初始化设置参数并调用设备类设置参数
     */
    void on_btnInitSettings_clicked();
    
    /**
     * @brief 精延迟和使能设置按钮点击事件槽函数
     * @details 收集UI中的精延迟和使能设置参数并调用设备类设置参数
     */
    void on_btnSetParams_clicked();
    
    /**
     * @brief 单元格内容变化事件处理槽函数
     * @param row 行号
     * @param column 列号
     * @details 当表格单元格内容变化时，验证输入值是否有效
     */
    void onCellChanged(int row, int column);

private:
    /**
     * @brief 更新UI值为设备实际值
     * @details 从设备获取当前参数值并设置到UI控件上
     */
    void updateUIValues();
signals:

    /**
     * @brief 日志写入信号
     * @param logInfo 日志信息
     * @param logLevel 日志级别（默认0）
     * @param isSave 是否保存到文件（默认false）
     */
    void writeLog(const QString& logInfo,int logLevel=0,bool isSave=false);
private:
    Ui::DelayDeviceParamsSet *ui;
    
    // 拖拽相关成员变量
    bool m_isDragging;      // 是否正在拖拽
    QPoint m_lastMousePos;  // 上次鼠标位置
    
    DelayDevice* m_pDelayDevice; //设备管理对象
    
    // 定时器成员变量
    QTimer* m_pADValueTimer; // 用于定时更新AD值的定时器
};

#endif // DELAYDEVICEPARAMSSET_H
